/**
 *
 */
package platform.common.dao;

import java.io.Serializable;

import platform.common.bo.AbstractNestedSetTreeNode;
import platform.common.dao.impl.DaoException;


import platform.common.dao.IBaseDao;
import platform.common.dao.IDomainProvider;

/**
 * @author daizs
 *
 */
public interface INestSetTreeDao extends IBaseDao{
	/**
	 * 插入一个嵌套集合树节点
	 *
	 * @param treeNode 嵌套集合树节点
	 * @param parentId 父节点ID
	 * @throws DaoException
	 */
	public Serializable insertTreeNode(AbstractNestedSetTreeNode treeNode,Serializable parentId) throws DaoException;
	/**
	 * 
	 * <br/>方法描述:插入一个嵌套集合树节点,不需要构造左右值
	 * @param treeNode
	 * @throws DaoException
	 */
	public void insertTreeNodeNotSetLR(AbstractNestedSetTreeNode treeNode) throws DaoException;
	/**
	 * 依据ID删除一个嵌套集合树节点
	 *
	 * @param treeNodeClazz 嵌套集合树节点Class
	 * @param oId 节点ID
	 * @throws DaoException
	 */
	public void delTreeNodeById(Class treeNodeClazz,Serializable oId) throws DaoException;
	/**
	 * 更新一个嵌套集合树节点，不改变节点在树的位置，只更新内容，即不改变节点的左右值
	 *
	 * @param treeNode 嵌套集合树节点
	 * @throws DaoException
	 */
	public void updateTreeNode(AbstractNestedSetTreeNode treeNode) throws DaoException;
	/**
	 * 插入一个嵌套集合树兄弟节点
	 *
	 * @param treeNode 嵌套集合树节点
	 * @param brotherId 兄弟节点
	 * @throws DaoException
	 */
	public void insertTreeNodeBrother(AbstractNestedSetTreeNode treeNode,
			Serializable brotherId) throws DaoException;
	/**
	 *
	 * <br/>方法描述:某个节点在本层节点间上移
	 * @param treeNode 上移的节点
	 * @throws DaoException
	 */
	public void moveUp(AbstractNestedSetTreeNode treeNode)throws DaoException;

	/**
	 *
	 * <br/>方法描述:某个节点在本层节点间下移
	 * @param treeNode 下移的节点
	 * @throws DaoException
	 */
	public void moveDown(AbstractNestedSetTreeNode treeNode)throws DaoException;
	/**
	 * 
	 * <br/>方法描述:把某节点及其子孙节点复制到另一个节点下
	 * @param treeNodeClazz 嵌套集合树节点Class
	 * @param origTreeNodeId 被复制节点id
	 * @param destTreeNodeId 复制目的节点id
	 * @throws DaoException
	 */
	public void copyTreeNode(IDomainProvider domainProvider,Class treeNodeClazz,AbstractNestedSetTreeNode origTreeNodeId,AbstractNestedSetTreeNode destTreeNodeId)throws DaoException;
	
	/**
	 * 
	 * <br/>方法描述:把某节点及其子孙节点移动到另一个节点下
	 * @param origTreeNodeId 被移动节点id
	 * @param destTreeNodeId 移动目的节点id
	 * @throws DaoException
	 */
	public void moveTreeNode(IDomainProvider domainProvider,Class treeNodeClazz,AbstractNestedSetTreeNode origTreeNodeId,AbstractNestedSetTreeNode destTreeNodeId)throws DaoException;
	

}
